package com.itheima.d1_create_thread;

/**
 * 目标：掌握多线程创建方式二的匿名内部类写法。
 *      可以创建Runnable的匿名内部类对象。
 *      再交给Thread线程对象。
 *      再调用线程对象的start()启动线程。
 *
 */
public class ThreadTest2_2 {
    public static void main(String[] args) {
        // 1、直接创建Runnable接口的匿名内部类形式（任务对象），不仅是一个匿名内部类，也是一个现成的Runnable任务对象
        Runnable target = new Runnable() {
            @Override
            public void run() {
                for (int i = 1; i <= 5; i++) {
                    System.out.println("多线程创建方式二Runnable的匿名内部类写法的子线程1输出：" + i);
                }
            }
        };
        new Thread(target).start();

       /*  Runnable接口的源码，是函数式接口，只有一个抽象方法，可以用匿名内部类，还可以用lambda的方式简化
        @FunctionalInterface
public interface Runnable {
 public abstract void run();
}
         */


        // 简化形式1，用匿名内部类：
        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 1; i <= 5; i++) {
                    System.out.println("多线程创建方式二Runnable的匿名内部类写法的子线程2输出：" + i);
                }
            }
        }).start();

        // 简化形式2，用lambda表达式：
        new Thread(() -> {
                for (int i = 1; i <= 5; i++) {
                    System.out.println("多线程创建方式二Runnable的匿名内部类写法的子线程3输出：" + i);
                }
        }).start();

        for (int i = 1; i <= 5; i++) {
            System.out.println("主线程main输出：" + i);
        }
    }
}
